package com.ruoyi.campus.mapper;

import java.util.List;
import com.ruoyi.campus.domain.Department;
import org.apache.ibatis.annotations.Param;

/**
 * 部门信息Mapper接口
 * 
 * @author ruoyi
 * @date 2025-01-08
 */
public interface DepartmentMapper 
{
    /**
     * 查询部门信息
     * 
     * @param deptId 部门信息主键
     * @return 部门信息
     */
    public Department selectDepartmentByDeptId(Long deptId);

    /**
     * 查询部门信息列表
     * 
     * @param department 部门信息
     * @return 部门信息集合
     */
    public List<Department> selectDepartmentList(Department department);

    /**
     * 新增部门信息
     * 
     * @param department 部门信息
     * @return 结果
     */
    public int insertDepartment(Department department);

    /**
     * 修改部门信息
     * 
     * @param department 部门信息
     * @return 结果
     */
    public int updateDepartment(Department department);

    /**
     * 删除部门信息
     * 
     * @param deptId 部门信息主键
     * @return 结果
     */
    public int deleteDepartmentByDeptId(Long deptId);

    /**
     * 批量删除部门信息
     * 
     * @param deptIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteDepartmentByDeptIds(Long[] deptIds);

    /**
     * 校验部门名称是否唯一
     *
     * @param deptName 部门名称
     * @param deptId 部门ID
     * @return 结果
     */
    public Department checkDeptNameUnique(@Param("deptName") String deptName, @Param("deptId") Long deptId);

    /**
     * 校验部门编码是否唯一
     *
     * @param deptCode 部门编码
     * @param deptId 部门ID
     * @return 结果
     */
    public Department checkDeptCodeUnique(@Param("deptCode") String deptCode, @Param("deptId") Long deptId);

    /**
     * 根据部门ID查询信息
     *
     * @param deptId 部门ID
     * @return 部门信息
     */
    public Department selectDeptById(Long deptId);

    /**
     * 根据部门名称查询信息
     *
     * @param deptName 部门名称
     * @return 部门信息
     */
    public Department selectDeptByName(String deptName);

    /**
     * 根据ID查询所有子部门
     *
     * @param deptId 部门ID
     * @return 部门列表
     */
    public List<Department> selectChildrenDeptById(Long deptId);

    /**
     * 根据ID查询所有子部门（正常状态）
     *
     * @param deptId 部门ID
     * @return 子部门数
     */
    public int selectNormalChildrenDeptById(Long deptId);

    /**
     * 是否存在部门子节点
     *
     * @param deptId 部门ID
     * @return 结果
     */
    public int hasChildByDeptId(Long deptId);

    /**
     * 查询部门是否存在用户
     *
     * @param deptId 部门ID
     * @return 结果
     */
    public int checkDeptExistUser(Long deptId);

    /**
     * 查询部门是否存在点位
     *
     * @param deptId 部门ID
     * @return 结果
     */
    public int checkDeptExistPoint(Long deptId);

    /**
     * 查询部门是否存在安全员
     *
     * @param deptId 部门ID
     * @return 结果
     */
    public int checkDeptExistGuard(Long deptId);

    /**
     * 修改所在部门正常状态
     *
     * @param deptIds 部门ID组
     */
    public void updateDeptStatusNormal(Long[] deptIds);

    /**
     * 修改子元素关系
     *
     * @param depts 子元素
     * @return 结果
     */
    public int updateDeptChildren(List<Department> depts);

    /**
     * 获取部门点位数量统计
     *
     * @param deptId 部门ID
     * @return 点位数量
     */
    public int getPointCountByDeptId(Long deptId);
}